home *** CD-ROM | disk | FTP | other *** search
- /* cvcopy.c
- * copy initialization code into the crystal file
- ************************************************************************/
-
- #include <stdio.h>
- #include <filehdr.h>
- #include <ldfcn.h>
- #include <fcntl.h>
- #include <sys/stat.h>
-
- #include "cvmisc.h"
- #include "cvinit.h"
-
- extern char *malloc();
-
- static char crynam[] = "crystal";
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- auto int r, w;
- auto char *abuff;
- auto unsigned length, rlen;
- auto long where,offset;
- auto FILE *stream;
- auto LDFILE *ldptr;
- auto struct stat cstat;
-
- ldptr = NULL;
- if ((ldptr = ldopen(crynam,ldptr)) == NULL ) {
- perror(argv[0]);
- exit(1);
- }
- if (ldnsseek(ldptr,".data") == FAILURE) {
- perror(argv[0]);
- exit(1);
- }
- if ( (r = open(path,O_RDWR)) == EOF) {
- perror(argv[0]);
- exit(1);
- }
- if ( (w = open(crynam,O_RDWR)) == EOF) {
- perror(argv[0]);
- exit(1);
- }
- stream = IOPTR(ldptr);
- offset = ftell(stream);
- if ((where = lseek(w,offset,0)) == (long)-1 ) {
- perror(argv[0]);
- exit(1);
- }
- if (fstat(r,&cstat)) {
- perror(argv[0]);
- exit(1);
- }
- length = cstat.st_size;
- if ((abuff = malloc(length)) == NULL ) {
- perror(argv[0]);
- exit(1);
- }
- if ((rlen = read(r,abuff,length)) == EOF || rlen != length) {
- perror(argv[0]);
- exit(1);
- }
- if (write(w,abuff,length) == EOF) {
- perror(argv[0]);
- exit(1);
- }
- free(abuff);
-
- if (close(r)) {
- perror(argv[0]);
- exit(1);
- }
- if (close(w)) {
- perror(argv[0]);
- exit(1);
- }
- if (ldclose(ldptr) == FAILURE) {
- perror(argv[0]);
- exit(1);
- }
- if (unlink(path) == EOF) {
- perror(argv[0]);
- exit(1);
- }
- return;
- }
-